package com.practice.niuke.new_direct_practice.class16;

/**
 * 给定一个数组arr，arr[0]表示从原点向右移动的距离;arr[1]表示从上一步移动到的点出
 * 发向上移动的距离;arr[2]表示从上一步移动到的点出发向左移动的距离;arr[3]表示从上
 * 一步移动到的点出发向下移动的距离;arr[4]表示从上一步移动到的点出发向右移动的距离;
 * arr[5]表示从上一步移动到的点出发向上移动的距离;arr[6]表示从上一步移动到的点出发
 * 向左移动的距离... 返回在移动的过程中，会不会和之前的移动轨迹碰撞。
 */
public class Code01_SelfCrossing {

	public static boolean isSelfCrossing(int[] x) {
		if (x == null || x.length < 4) {
			return false;
		}
		// 0 1 2 3 4
		if ((x.length > 3 && x[2] <= x[0] && x[3] >= x[1]) //
				|| (x.length > 4 && ((x[3] <= x[1] && x[4] >= x[2]) || (x[3] == x[1] && x[0] + x[4] >= x[2])))) {
			return true;
		}
		for (int i = 5; i < x.length; i++) {
			if (x[i - 1] <= x[i - 3] &&

					((x[i] >= x[i - 2])

							||

							(x[i - 2] >= x[i - 4] && x[i - 5] + x[i - 1] >= x[i - 3] && x[i - 4] + x[i] >= x[i - 2])

					)) {
				return true;
			}
		}
		return false;
	}

}
